package com.gupao.javavip.gof.singleton;

import java.io.Serializable;

/**
 * 懒汉式单例模式-线程安全-内部类实现
 * <p>
 * 优点：这种形式兼顾饿汉式的内存浪费，也兼顾 synchronized 性能问题。内部类一定是要在方法调用之前初始化，巧妙地避免了线程安全问题。
 * 缺点：相对于其他几种，不那么容易理解。
 */
public class LazySingletonSafeInnerClassSerializeUnSafe implements Serializable {
    //构造方法私有化
    private LazySingletonSafeInnerClassSerializeUnSafe() {
        if (getInstance() != null) {
            throw new RuntimeException("不允许创建多个实例");
        }
    }

    //提供全局访问点
    //final关键字保证这个方法不会被重写， 重载
    public static final LazySingletonSafeInnerClassSerializeUnSafe getInstance() {
        //在返回结果以前， 一定会先加载内部类
        return LazyHolder.LAZY;
    }

    //默认不加载
    private static class LazyHolder {
        private static final LazySingletonSafeInnerClassSerializeUnSafe LAZY = new LazySingletonSafeInnerClassSerializeUnSafe();
    }
}
